import { INestApplication } from '@nestjs/common';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';

/**
 * Swagger 配置
 * 单独抽离配置，保持 main.ts 简洁
 */
export function setupSwagger(app: INestApplication): void {
  // 创建 Swagger 文档配置
  const config = new DocumentBuilder()
    .setTitle('代码小库 API 文档')
    .setDescription('代码小库后端 API 接口文档')
    .setVersion('1.0.0')
    .setContact('开发团队', 'https://github.com/your-repo', 'dev@example.com')
    .setLicense('MIT', 'https://opensource.org/licenses/MIT')
    // 添加服务器地址
    .addServer('http://localhost:3001', '本地开发环境')
    .addServer('https://api.example.com', '生产环境')
    // 添加标签分组
    .addTag('认证', '用户认证相关接口')
    .addTag('用户', '用户管理相关接口')
    .addTag('商品', '商品管理相关接口')
    .addTag('订单', '订单管理相关接口')
    .addTag('支付', '支付相关接口')
    // 添加 JWT 认证
    .addBearerAuth(
      {
        type: 'http',
        scheme: 'bearer',
        bearerFormat: 'JWT',
        name: 'JWT',
        description: '输入 JWT Token（登录后获取）',
        in: 'header',
      },
      'JWT-auth', // 👈 这个名字要和装饰器 @ApiBearerAuth('JWT-auth') 一致
    )
    .build();

  // 创建 Swagger 文档
  const document = SwaggerModule.createDocument(app, config);

  // 设置 Swagger UI 路径
  SwaggerModule.setup('api-docs', app, document, {
    // 自定义选项
    swaggerOptions: {
      persistAuthorization: true, // 保持认证状态
      docExpansion: 'none', // 默认不展开
      filter: true, // 启用搜索
      showRequestDuration: true, // 显示请求耗时
    },
    customSiteTitle: '代码小库 API 文档', // 自定义标题
    customCss: '.swagger-ui .topbar { display: none }', // 隐藏顶栏
  });

  console.log('📚 Swagger 文档已启用: http://localhost:3001/api-docs');
}
